package com.jjiang.bbmall.order;

import com.alibaba.cloud.seata.GlobalTransactionAutoConfiguration;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;


/**
 * RabbitMQ的使用
 * 1. 引入amqp场景
 * 2. 给容器中自动配置了RabbitTemplate，AmqpAdmin，CachingConnectionFactory，RabbitMessageTemplate
 * 3. @EnableRabbit
 * 4. 在配置文件中配置spring.rabbitmq
 * 5. 接收消息
 * 5.1 使用@RabbitLister进行队列监听，且必须开启@EnableRabbit；@RabbitLister可以标在【类和方法】上，可以说明监听哪些队列
 * 5.2 使用@RabbitHandler进行队列监听；可以进行【重载】的操作，可以使用多个方法接收多种类型的消息
 * SEATA的使用[http://seata.io/zh-cn/docs/overview/what-is-seata.html]
 * 1. 每个微服务都需要创建undo_log表格
 * 2. 安装seata-server服务
 * 3. 整合
 * 3.1 导入依赖spring-cloud-starter-alibaba-seata
 * 3.2 解压并启动seata-server服务器【本项目使用seata-server-0.7.1】
 * 3.2.1 registry.conf:注册中心的配置
 * 3.2.2 file.conf:配置存放的文件
 * 3.3 @GlobalTransitional标注注解
 * 4. 导入其他事项
 * 4.1 所有想要用到的分布式事务的微服务都需要使用SEATA的DataSourceProxy代理自己的数据源
 * 4.2 导入registry.conf和file.conf
 * 4.3 file.conf的【vgroup_mapping.my_test_tx_group】必须与服务name一致：例如bbmall-order的应该修改为bbmall-order-fescar-service-group
 * 5. 给分布式大事务的入口标注@GlobalTransitional标注注解全局事务，每个小事务用@Transitional启动测试
 */
@EnableFeignClients
@EnableRedisHttpSession
@EnableRabbit
@EnableDiscoveryClient
@SpringBootApplication(exclude = GlobalTransactionAutoConfiguration.class)
public class BbmallOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(BbmallOrderApplication.class, args);
    }

}
